package reflect;

import java.io.File;
import java.io.FileInputStream;
import java.lang.reflect.Method;
import java.util.Properties;

/**
 * 使用反射决定使用哪个Service
 *
 * @author cuihao
 * @date 2017/12/20
 */
public class TestWithReflect {
    public static void main(String[] args) {
        try {
            //获取classpath的两种方式，第一种更好
            String patha = Thread.currentThread().getContextClassLoader().getResource("").getPath();
            String pathb = TestWithReflect.class.getResource("/").toString();
            // 这是几行框架里常用的代码
            File fileConfig = new File(patha + "ReflectConfigTest.txt");
            Properties properties = new Properties();
            properties.load(new FileInputStream(fileConfig));

            String classname = properties.getProperty("class");
            String method = properties.getProperty("method");

            //根据类名创建Class类的对象
            Class clazz = Class.forName(classname);
            Method m = clazz.getMethod(method);

            //实例出Service1类的对象
            Object service = clazz.newInstance();
            m.invoke(service);//调用

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
